load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library")

oncall("fbcode_entropy_wardens_folly")

# "logging" is the core of the logging library
# If you want to log messages from your code, this is the library you should
# depend on.
cpp_library(
    name = "logging",
    srcs = [
        "AsyncFileWriter.cpp",
        "AsyncLogWriter.cpp",
        "CustomLogFormatter.cpp",
        "FileWriterFactory.cpp",
        "GlogStyleFormatter.cpp",
        "ImmediateFileWriter.cpp",
        "LogCategory.cpp",
        "LogCategoryConfig.cpp",
        "LogConfig.cpp",
        "LogMessage.cpp",
        "LogStream.cpp",
        "LogStreamProcessor.cpp",
        "Logger.cpp",
        "LoggerDB.cpp",
        "ObjectToString.cpp",
        "StandardLogHandler.cpp",
        "StandardLogHandlerFactory.cpp",
        "StreamHandlerFactory.cpp",
        "xlog.cpp",
    ],
    headers = [
        "AsyncFileWriter.h",
        "AsyncLogWriter.h",
        "CustomLogFormatter.h",
        "FileWriterFactory.h",
        "GlogStyleFormatter.h",
        "ImmediateFileWriter.h",
        "LogCategory.h",
        "LogCategoryConfig.h",
        "LogConfig.h",
        "LogFormatter.h",
        "LogMessage.h",
        "LogStream.h",
        "LogStreamProcessor.h",
        "LogWriter.h",
        "Logger.h",
        "LoggerDB.h",
        "ObjectToString.h",
        "StandardLogHandler.h",
        "StandardLogHandlerFactory.h",
        "StreamHandlerFactory.h",
        "xlog.h",
    ],
    export_header_unit = "preload",
    preprocessor_flags = [
        "-DFOLLY_XLOG_SUPPORT_BUCK2",
    ],
    deps = [
        "//folly:constexpr_math",
        "//folly:demangle",
        "//folly:exception",
        "//folly:file_util",
        "//folly:format",
        "//folly:map_util",
        "//folly:string",
        "//folly/portability:fcntl",
        "//folly/portability:pthread",
        "//folly/portability:time",
        "//folly/portability:unistd",
        "//folly/system:at_fork",
        "//folly/system:thread_id",
        "//folly/system:thread_name",
    ],
    exported_deps = [
        "fbsource//third-party/fmt:fmt",
        ":log_handler",
        ":log_level",
        ":log_name",
        ":rate_limiter",
        "//folly:c_portability",
        "//folly:conv",
        "//folly:cpp_attributes",
        "//folly:exception_string",
        "//folly:file",
        "//folly:likely",
        "//folly:optional",
        "//folly:portability",
        "//folly:range",
        "//folly:scope_guard",
        "//folly:synchronized",
        "//folly/detail:static_singleton_manager",
        "//folly/lang:exception",
        "//folly/lang:type_info",
    ],
)

# "init" contains code needed to configure the logging library.
# The main initialization code in your program should normally depend
# on this to initialize the logging library.
cpp_library(
    name = "init",
    srcs = [
        "Init.cpp",
        "LogConfigParser.cpp",
    ],
    headers = [
        "Init.h",
        "LogConfigParser.h",
    ],
    deps = [
        ":log_name",
        "//folly:conv",
        "//folly:string",
        "//folly/json:dynamic",
        "//folly/lang:safe_assert",
    ],
    exported_deps = [
        ":init_weak",  # @manual
        ":logging",
        "//folly:c_portability",
        "//folly:range",
    ],
)

cpp_library(
    name = "init_weak",
    srcs = [
        "InitWeak.cpp",
    ],
    deps = [
        "//folly:c_portability",
    ],
)

cpp_library(
    name = "file_handler_factory",
    srcs = ["FileHandlerFactory.cpp"],
    headers = ["FileHandlerFactory.h"],
    deps = [
        ":logging",
    ],
    exported_deps = [
        ":log_handler",
    ],
)

cpp_library(
    name = "log_handler",
    srcs = [
        "LogHandlerConfig.cpp",
    ],
    headers = [
        "LogHandler.h",
        "LogHandlerConfig.h",
        "LogHandlerFactory.h",
    ],
    deps = [
        "//folly/lang:safe_assert",
    ],
    exported_deps = [
        ":log_level",
        "//folly:cpp_attributes",
        "//folly:optional",
        "//folly:range",
    ],
)

cpp_library(
    name = "log_level",
    srcs = ["LogLevel.cpp"],
    headers = ["LogLevel.h"],
    deps = [
        "//folly:conv",
    ],
    exported_deps = [
        "//folly:portability",
        "//folly:range",
    ],
)

cpp_library(
    name = "log_name",
    srcs = ["LogName.cpp"],
    headers = ["LogName.h"],
    exported_deps = [
        "//folly:range",
    ],
)

cpp_library(
    name = "rate_limiter",
    srcs = ["RateLimiter.cpp"],
    headers = ["RateLimiter.h"],
    exported_deps = [
        "//folly:chrono",
    ],
)

cpp_library(
    name = "glog_bridge",
    srcs = ["BridgeFromGoogleLogging.cpp"],
    headers = ["BridgeFromGoogleLogging.h"],
    deps = [
        ":logging",
        "//folly:utility",
    ],
    exported_external_deps = ["glog"],
)

cpp_library(
    name = "auto_timer",
    headers = ["AutoTimer.h"],
    exported_deps = [
        "fbsource//third-party/fmt:fmt",
        "//folly:conv",
        "//folly:optional",
        "//folly:string",
    ],
    exported_external_deps = [
        "glog",
    ],
)
